/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package lista;

import java.util.HashSet;
import java.util.Set;

/**
 *
 * @author Oscar
 */
public class Lista {
    NodoLista cabeza;    
    int largo;
    
    Lista()
    {
        cabeza = null;
        largo =0;   
    }
    public NodoLista Cabeza (){
        return cabeza;
    }
    
    public int Largo()
    {
        return largo;
    }

    public void Agregar(int valor)
    {
        NodoLista nodoActual; 
        if (EstaVacio() )
        {
            cabeza = new NodoLista();
            cabeza.Set(valor);
            cabeza.SetSiguiente(null);           
        }
        else{
            nodoActual = cabeza;
            while(nodoActual.GetSiguiente()!= null){                                              
                nodoActual = nodoActual.GetSiguiente();
            }     
            nodoActual.SetSiguiente(new NodoLista(valor));
        }
        largo++;
    }
    
    public boolean EstaVacio()
    {
        if (largo ==0)
            return true;
        return false;
    }
    public String ToString(){
        
        StringBuilder sb = new  StringBuilder();
        NodoLista nodoActual; 
        if (!EstaVacio())
        {
             nodoActual= cabeza;
             
             do{
                 sb.append(nodoActual.Get());
                 sb.append(" -> ");
                 nodoActual = nodoActual.GetSiguiente();                
             }
             while (nodoActual!=null);             
        }
        sb.append("null");
        return sb.toString();
    }
    public NodoLista GetCola(){
        if (!EstaVacio()){
            NodoLista nodoActual = cabeza;            
            while (nodoActual.GetSiguiente()!=null){
                nodoActual = nodoActual.GetSiguiente();                
            }
            return nodoActual;
        }
        return null;
    }
    
    public void EliminarCola(){
        if (!EstaVacio()){
            NodoLista nodoActual = cabeza;
            if (this.Largo() == 1)
            {
                cabeza = null;
                largo--;
                return;
            }
            while (nodoActual.GetSiguiente()!=null){
                if (nodoActual.GetSiguiente().GetSiguiente() ==null)
                {
                    nodoActual.SetSiguiente(null);
                    largo--;
                    return;
                }
                nodoActual = nodoActual.GetSiguiente();
            }            
        }
    }
}
